package com.awccis.admin.dao;

import com.awccis.admin.model.AdminBean;
import com.awccis.admin.model.DriverLocationBean;
import com.awccis.admin.model.adver.AdverBean;
import com.awccis.admin.model.adver.AdverInfoBean;
import com.awccis.admin.model.adver.LogoBean;
import com.awccis.admin.model.commission.CommissionBean;
import com.awccis.admin.model.commission.DriverCommissionBean;
import com.awccis.admin.model.order.OrdersCountBean;
import com.awccis.admin.model.pay.PaySimpleInfoBean;
import com.awccis.admin.model.price.PriceBean;
import com.awccis.customer.model.CustomerInfo;
import com.awccis.driver.model.DriverDetailInfo;
import com.awccis.driver.model.DriverInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;

/**
 * @author txp
 */
@Repository
public interface AdminDao {

    /**
     * admin登录
     *
     * @param adminBean 用户名
     * @return adminBean
     */
    AdminBean selectAdminInfo(AdminBean adminBean);

    /**
     * admin重置密码
     *
     * @param map 用户编号
     */
    int changePwd(HashMap map);

    /**
     * 查询所有管理员的信息
     *
     * @param level
     * @return
     */
    List<AdminBean> selectAdminList(int level);

    /**
     * 通过id删除管理员
     *
     * @param id 管理员id
     * @return 影响的行数
     */
    Integer deleteAdminById(int id);

    /**
     * 添加管理员
     *
     * @param hashMap adminName adminPasswd adminPowerLevel
     * @return 影响行数
     */
    Integer insertAdmin(HashMap hashMap);

    /**
     * 获取所有用户
     *
     * @return list用户列表
     */
    LinkedList<CustomerInfo> selectCustomers();

    /**
     * 查询所有司机
     *
     * @return list司机列表
     */
    LinkedList<DriverInfo> selectDrivers();

    /**
     * 根据driverNickName查询driverInfo
     *
     * @param nickName nickName
     * @return driverInfo
     */
    LinkedList<DriverInfo> selectDriversByNickName(int nickName);

    /**
     * 通过driverId查询司机的详细信息
     *
     * @param driverId driverId 司机的driverId
     * @return driverDetailInfo
     */
    DriverDetailInfo selectDriverDetailInfoById(int driverId);

    /**
     * 注销司机的手机号
     *
     * @param driverId driverId 司机Id
     * @return 影响行数
     */
    Integer updateDriverPhoneNull(int driverId);

    /**
     * 查找汇率
     *
     * @return 汇率值
     */
    Double selectExchangeRate();

    /**
     * 查询所有当前在线的司机的位置信息和姓名手机号
     *
     * @return
     */
    List<DriverLocationBean> selectDriverLocationInfo();

    /**
     * 查询上一条价格记录信息
     *
     * @param priceId priceId
     * @return 价格信息
     */
    PriceBean selectLastPrice(Integer priceId);

    /**
     * 获取所有价格信息
     *
     * @return
     */
    List<PriceBean> selectPriceDetailInfo();

    /**
     * 查询价格表的总记录数
     *
     * @return 总记录数
     */
    Integer selectPriceCount();

    /**
     * 更改价格
     *
     * @param priceBean
     * @return
     */
    Integer updatePriceById(PriceBean priceBean);

    /**
     * 删除所有价格体系
     *
     * @return 影响行数
     */
    Integer deleteFromPrice();

    /**
     * 添加价格体系规则
     *
     * @param list 规则列表
     * @return 影响行数
     */
    Integer insertPriceDetailInfo(List<PriceBean> list);

    /**
     * 获取抽成体系规则
     *
     * @return list
     */
    List<CommissionBean> selectCommissionRule();

    /**
     * 清空抽成体系
     */
    void deleteAllCommissionRule();

    /**
     * 添加抽成体系规则
     *
     * @param list list 规则列表
     * @return 影响行数
     */
    Integer insertCommissionRule(List<CommissionBean> list);

    /**
     * 获取所有需要支付平台费用的司机
     *
     * @return list
     */
    List<PaySimpleInfoBean> selectAllDriverNeedPay();

    /**
     * 及时更新driverNeedPay信息
     *
     * @param list list
     * @return 影响行数
     */
    Integer updateDriverNeedPay(List<PaySimpleInfoBean> list);

    /**
     * 清空缴费记录表
     */
    void deletePayRecord();

    /**
     * 查询数据库中是否已经存在本周需要缴费的司机
     *
     * @param payWeeks
     * @return
     */
    Integer selectPayRecordCounts(String payWeeks);

    /**
     * 记录本周所有需要向平台支付费用的司机
     *
     * @param list list
     * @return 影响行数
     */
    Integer insertDriverNeedPay(List<PaySimpleInfoBean> list);

    /**
     * 计算当前driver需要支付的费用
     *
     * @param driverId
     * @return
     */
    Double callDriverNeedPay(int driverId);

    /**
     * 根据周数查找当前周的所有需要支付的司机
     *
     * @param payWeek payWeek
     * @return list
     */
    List<PaySimpleInfoBean> selectDriverPayDirectly(String payWeek);

    /**
     * 查询基础抽成比例
     *
     * @return 基础比例
     */
    Double selectBasicsCommission();

    /**
     * 查询driver的抽成比例
     *
     * @return list
     */
    List<DriverCommissionBean> selectDriverCommission();

    /**
     * 更改driver的commission
     *
     * @param driverCommissionBean driverCommission
     * @return 影响的行数
     */
    Integer updateDriverCommission(DriverCommissionBean driverCommissionBean);

    /**
     * 添加driverCommission
     *
     * @param list driverCommission
     * @return 影响的行数
     */
    Integer insertDriverCommission(List<DriverCommissionBean> list);

    /**
     * 查找所有司机对应的总订单数
     *
     * @return list
     */
    List<OrdersCountBean> selectAllDriverOrdersCount();

    /**
     * 计算每个司机的基础抽成比例
     *
     * @param driverId driverID
     * @param sumOrder 当前总订单数
     * @return 基础抽成比例
     */
    Double calculateDriverCommission(@Param("driverId") int driverId, @Param("sumOrder") int sumOrder);

    /**
     * 查询driver的上周修改的Commission
     *
     * @param driverId driverID
     * @return 修改的Commission
     */
    Double selectDriverLastCommission(Integer driverId);
}
